package com.ftg.learn.chapter17;

import java.util.*;

/**
 * @author KangJx
 * @date 2021/8/13
 */
public class HomeWork {

    /**
     * 现给定一个数组里面元素如下[1,23,23,4335,3,45,ba,ba,a,t,a,t,t,t,b,123,3,4,5,6,1,2,3,4,56,78]，当前数组中，各个元素的个数？
     * @return
     */
    public Map<String,Integer> q22(Object[] arr){
        //空的map集合  里面的方法，为了对付那些狗的人
        Map<String,Integer> map2 = Collections.EMPTY_MAP;
        if(arr == null){
            throw new IllegalArgumentException("数组不能为空");
        }
        map2 = new HashMap<>(arr.length >> 1);

        for(Object obj : arr){
            Object val = map2.get(obj.toString());
            //val 有两种  一种为null,一种为正常类型
            map2.put(obj.toString(),val == null ? 1: map2.get(obj.toString()) + 1);
        }

        return map2;
    }

    /**
     * [1,23,23,4335,3,45] 请将数组变成升序数组。请使用至少三种以上方法。
     * @return
     */
    public int[] q23(int[] arr){
        Arrays.sort(arr);
        return arr;
    }

    public List<Integer> q231(int[] arr){
        List<Integer> list1 = Arrays.asList(1,23,23,4335,3,45);
        //Comparator 里同是否只有一个方法需要重写 comare  : 如果接口里面只有一个方法需要求重，我们可以把这个接口叫做函数接口
        //目标：就是让这个接口里面向函数编程 ： java是通过lambda表达式来完成函数式编程的
        //接口上面存放注释FunctionalInterface  函数式接口
        list1.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        });
        return list1;

    }

    public List<Integer> q232(int[] arr){
        List<Integer> list1 = Arrays.asList(1,23,23,4335,3,45);
        //后期细聊吧
        list1.sort((a,b) -> a < b ? 1: -1);
        return list1;
    }

    public List<Integer> q233(int[] arr){
        List<Integer> list1 = Arrays.asList(1,23,23,4335,3,45);
        //后期细聊吧
        //是按照自然排序的 comparable
        Collections.sort(list1);
        return list1;
    }


    public Integer[] q2311(int[] arr){
        List<Integer> list1 = Arrays.asList(1,23,23,4335,3,45);
        list1.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        });
        return (Integer[]) list1.toArray();
    }


    public static void main(String[] args) {

        // Arrays  collections来做的！
        // Arrays.sort(数组); 可以对我们已知的(基本类型|对象数组【implements Comparable】)数组进行排序
        // List.sort(Comparator);
        // -- Comparator 是外部使用比较器
        // -- comparable 是类内部使用的比较方法

        //collections
        // -- static
        //  List	EMPTY_LIST
        //          空列表（不可变）。
        //  static Map	EMPTY_MAP
        //          空地图（immutable）。
        // static Set	EMPTY_SET
        //      空集（不可变）。
        // collections.sort(); 自然排序

//        frequency(Collection<?> c, Object o)
//        返回指定集合中与指定对象相等的元素数。

         List<Integer> list1 = Arrays.asList(1,23,23,4335,3,45);

         int num = Collections.frequency(list1,23);
        System.out.println(num);

    }

}
